

#include <idt.h>
#include <inout.h>


char __set_irq_handler(unsigned char irq, void (*func)()){

  if (irq >= 16) return 0;

  __make_idt_entry(32 + irq, func, 0x08, 0x8e);

  return 0;

}

void __destroy_irq(unsigned char irq){

  if (irq >= 16) return;

  __make_idt_entry(irq, 0, 0, 0);

}

void __irq_remap(){

  __out_c(0x20, 0x11);
  __out_c(0xa0, 0x11);
  __out_c(0x21, 0x20);
  __out_c(0xa0, 0x28);
  __out_c(0x21, 0x04);
  __out_c(0xa1, 0x02);
  __out_c(0x21, 0x01);
  __out_c(0xa1, 0x01);
  __out_c(0x21, 0x00);
  __out_c(0xa1, 0x00);

}
